<?php
function randIntList($length=100,$min=0,$max=0)
{
    if($max<$length){
        $max=$length*10;
    }
    $list=[];
    for($i=0;$i<$length;$i++){
        $list[]=rand($min,$max);
    }
    return $list;
}
/**
 * 生成不重复的整数列表
 */
function randUniqueIntList($length=100,$min=0,$max=0)
{
    if($max<$length){
        $max=$length*10;
    }
    $list=[];
    while(count($list)<$length){
        $int=rand($min,$max);
        $unique=true;
        foreach($list as $item){
            if($item===$int){
                $unique=false;
                break;
            }
        }
        if($unique){
            $list[]=$int;
        }
    }
    return $list;
}

/**
 * 生成不重复的整数列表
 * 使用数组的键存储数据
 */
function randUniqueIntList2($length=100,$min=0,$max=0)
{
    if($max<$length){
        $max=$length*10;
    }
    $list=[];
    while(count($list)<$length){
        $int=rand($min,$max);
        if(!isset($list[$int])){
            $list[$int]=true;
        }
    }
    $list=array_keys($list);
    return $list;
}

/**
 * 生成不重复的整数列表
 * 使用生成器和二叉查找树
 * yield返回的是一个生成器对象，每次迭代都会在yield处暂停并返回一个值
 */
function randUniqueIntList3($length=100,$min=0,$max=0)
{
    $bst=new BinarySearchTree();
    if($max<$length){
        $max=$length*10;
    }
    $i=0;
    while($i<$length){
        $value=rand($min,$max);
        if(!$bst->find($value)){
            $i++;
            $bst->insert($value);
            yield $value;
        }
    }
}
